{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color=\"red\">注</font>: 使用 tensorboard 可视化需要安装 tensorflow (TensorBoard依赖于tensorflow库，可以任意安装tensorflow的gpu/cpu版本)\n",
    "\n",
    "```shell\n",
    "pip install tensorflow\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-12-05T08:04:06.465407500Z",
     "start_time": "2023-12-05T08:04:02.703468400Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=9, micro=7, releaselevel='final', serial=0)\n",
      "matplotlib 3.5.1\n",
      "numpy 1.22.2\n",
      "pandas 1.4.2\n",
      "sklearn 1.0.2\n",
      "torch 2.0.1+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n",
    "\n",
    "seed = 42\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据准备\n",
    "\n",
    "https://www.kaggle.com/competitions/cifar-10/data\n",
    "\n",
    "```shell\n",
    "$ tree -L 1 cifar-10                                    \n",
    "cifar-10\n",
    "├── sampleSubmission.csv\n",
    "├── test\n",
    "├── train\n",
    "└── trainLabels.csv\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(PosixPath('cifar-10/train/1.png'), 'frog'),\n",
      " (PosixPath('cifar-10/train/2.png'), 'truck'),\n",
      " (PosixPath('cifar-10/train/3.png'), 'truck'),\n",
      " (PosixPath('cifar-10/train/4.png'), 'deer'),\n",
      " (PosixPath('cifar-10/train/5.png'), 'automobile')]\n",
      "[(PosixPath('cifar-10/test/1.png'), 'cat'),\n",
      " (PosixPath('cifar-10/test/2.png'), 'cat'),\n",
      " (PosixPath('cifar-10/test/3.png'), 'cat'),\n",
      " (PosixPath('cifar-10/test/4.png'), 'cat'),\n",
      " (PosixPath('cifar-10/test/5.png'), 'cat')]\n",
      "50000 300000\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "DATA_DIR = Path(\"./cifar-10\")\n",
    "\n",
    "train_lables_file = DATA_DIR / \"trainLabels.csv\"\n",
    "test_csv_file = DATA_DIR / \"sampleSubmission.csv\"\n",
    "train_folder = DATA_DIR / \"train/\"\n",
    "test_folder = DATA_DIR / \"test\"\n",
    "\n",
    "#所有的类别\n",
    "class_names = [\n",
    "    'airplane',\n",
    "    'automobile',\n",
    "    'bird',\n",
    "    'cat',\n",
    "    'deer',\n",
    "    'dog',\n",
    "    'frog',\n",
    "    'horse',\n",
    "    'ship',\n",
    "    'truck',\n",
    "]\n",
    "\n",
    "def parse_csv_file(filepath, folder):\n",
    "    \"\"\"Parses csv files into (filename(path), label) format\"\"\"\n",
    "    results = []\n",
    "    #读取所有行\n",
    "    with open(filepath, 'r') as f:\n",
    "#         lines = f.readlines()  为什么加[1:]，可以试这个\n",
    "        #第一行不需要，因为第一行是标签\n",
    "        lines = f.readlines()[1:] \n",
    "    for line in lines:#依次去取每一行\n",
    "        image_id, label_str = line.strip('\\n').split(',')\n",
    "        image_full_path = folder / f\"{image_id}.png\"\n",
    "        results.append((image_full_path, label_str)) #得到对应图片的路径和分类\n",
    "    return results\n",
    "\n",
    "#解析对应的文件夹\n",
    "train_labels_info = parse_csv_file(train_lables_file, train_folder)\n",
    "test_csv_info = parse_csv_file(test_csv_file, test_folder)\n",
    "#打印\n",
    "import pprint\n",
    "pprint.pprint(train_labels_info[0:5])\n",
    "pprint.pprint(test_csv_info[0:5])\n",
    "print(len(train_labels_info), len(test_csv_info))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               filepath       class\n",
      "0  cifar-10/train/1.png        frog\n",
      "1  cifar-10/train/2.png       truck\n",
      "2  cifar-10/train/3.png       truck\n",
      "3  cifar-10/train/4.png        deer\n",
      "4  cifar-10/train/5.png  automobile\n",
      "                   filepath       class\n",
      "0  cifar-10/train/45001.png       horse\n",
      "1  cifar-10/train/45002.png  automobile\n",
      "2  cifar-10/train/45003.png        deer\n",
      "3  cifar-10/train/45004.png  automobile\n",
      "4  cifar-10/train/45005.png    airplane\n",
      "              filepath class\n",
      "0  cifar-10/test/1.png   cat\n",
      "1  cifar-10/test/2.png   cat\n",
      "2  cifar-10/test/3.png   cat\n",
      "3  cifar-10/test/4.png   cat\n",
      "4  cifar-10/test/5.png   cat\n"
     ]
    }
   ],
   "source": [
    "# train_df = pd.DataFrame(train_labels_info)\n",
    "train_df = pd.DataFrame(train_labels_info[0:45000])\n",
    "valid_df = pd.DataFrame(train_labels_info[45000:])\n",
    "test_df = pd.DataFrame(test_csv_info)\n",
    "\n",
    "train_df.columns = ['filepath', 'class']\n",
    "valid_df.columns = ['filepath', 'class']\n",
    "test_df.columns = ['filepath', 'class']\n",
    "\n",
    "print(train_df.head())\n",
    "print(valid_df.head())\n",
    "print(test_df.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "from torchvision import transforms\n",
    "\n",
    "class Cifar10Dataset(Dataset):\n",
    "    df_map = {\n",
    "        \"train\": train_df,\n",
    "        \"eval\": valid_df,\n",
    "        \"test\": test_df\n",
    "    }\n",
    "    label_to_idx = {label: idx for idx, label in enumerate(class_names)} #将类别转换为数字\n",
    "    idx_to_label = {idx: label for idx, label in enumerate(class_names)}#将数字转换为类别\n",
    "    def __init__(self, mode, transform=None):\n",
    "        self.df = self.df_map.get(mode, None)\n",
    "        if self.df is None:\n",
    "            raise ValueError(\"mode should be one of train, val, test, but got {}\".format(mode))\n",
    "\n",
    "        self.transform = transform #对图片进行变换，transform是一个函数\n",
    "        \n",
    "    def __getitem__(self, index):\n",
    "        img_path, label = self.df.iloc[index]#得到对应的图片路径和类别\n",
    "        img = Image.open(img_path).convert('RGB')#打开图片\n",
    "        # # img 转换为 channel first\n",
    "        # img = img.transpose((2, 0, 1))\n",
    "        # transform\n",
    "        img = self.transform(img) #对图片进行变换\n",
    "        # label 转换为 idx\n",
    "        label = self.label_to_idx[label]\n",
    "        return img, label #返回图片和类别\n",
    "    \n",
    "    def __len__(self):\n",
    "        return self.df.shape[0]\n",
    "    \n",
    "IMAGE_SIZE = 32\n",
    "mean, std = [0.4914, 0.4822, 0.4465], [0.247, 0.243, 0.261]\n",
    "\n",
    "transforms_train = transforms.Compose([\n",
    "        # resize\n",
    "        transforms.Resize((IMAGE_SIZE, IMAGE_SIZE)),\n",
    "        # random rotation 40\n",
    "        transforms.RandomRotation(40),\n",
    "        # horizaontal flip\n",
    "        transforms.RandomHorizontalFlip(),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize(mean, std)\n",
    "    ])\n",
    "\n",
    "transforms_eval = transforms.Compose([\n",
    "        # resize\n",
    "        transforms.Resize((IMAGE_SIZE, IMAGE_SIZE)),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize(mean, std)\n",
    "    ])\n",
    "\n",
    "train_ds = Cifar10Dataset(\"train\", transforms_train)\n",
    "eval_ds = Cifar10Dataset(\"eval\", transforms_eval) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 64\n",
    "train_dl = DataLoader(train_ds, batch_size=batch_size, shuffle=True, num_workers=4)   \n",
    "eval_dl = DataLoader(eval_ds, batch_size=batch_size, shuffle=False, num_workers=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(tensor([-0.2209, -0.2282, -0.1986]), tensor([0.9980, 0.9955, 0.9039]))\n"
     ]
    }
   ],
   "source": [
    "# 遍历train_ds得到每张图片，计算每个通道的均值和方差\n",
    "# def cal_mean_std(ds):\n",
    "#     mean = 0.\n",
    "#     std = 0.\n",
    "#     for img, _ in ds:\n",
    "#         mean += img.mean(dim=(1, 2))\n",
    "#         std += img.std(dim=(1, 2))\n",
    "#     mean /= len(ds)\n",
    "#     std /= len(ds)\n",
    "#     return mean, std\n",
    "#\n",
    "# # 经过 normalize 后 均值为0，方差为1\n",
    "# print(cal_mean_std(train_ds))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             model.0.weight             paramerters num: 864\n",
      "              model.0.bias              paramerters num: 32\n",
      "             model.2.weight             paramerters num: 9216\n",
      "              model.2.bias              paramerters num: 32\n",
      "             model.5.weight             paramerters num: 9216\n",
      "              model.5.bias              paramerters num: 32\n",
      "             model.7.weight             paramerters num: 9216\n",
      "              model.7.bias              paramerters num: 32\n",
      "            model.10.weight             paramerters num: 9216\n",
      "             model.10.bias              paramerters num: 32\n",
      "            model.12.weight             paramerters num: 9216\n",
      "             model.12.bias              paramerters num: 32\n",
      "               cls.weight               paramerters num: 5120\n",
      "                cls.bias                paramerters num: 10\n"
     ]
    }
   ],
   "source": [
    "class VGG(nn.Module):\n",
    "    def __init__(self, num_classes):\n",
    "        super().__init__()\n",
    "        self.model = nn.Sequential(\n",
    "            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(kernel_size=2),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(kernel_size=2),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=\"same\"),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(kernel_size=2),\n",
    "            nn.Flatten(),\n",
    "        )\n",
    "        \n",
    "        self.cls = nn.Linear(512, num_classes)\n",
    "        \n",
    "        self.init_weights()\n",
    "        \n",
    "    def init_weights(self):\n",
    "        \"\"\"使用 xavier 均匀分布来初始化全连接层、卷积层的权重 W\"\"\"\n",
    "        for m in self.modules():\n",
    "            if isinstance(m, (nn.Linear, nn.Conv2d)):\n",
    "                nn.init.xavier_uniform_(m.weight)\n",
    "                nn.init.zeros_(m.bias)\n",
    "                \n",
    "    @classmethod\n",
    "    def from_pretrained(cls, ckpt_path, num_classes=10):\n",
    "        state_dict = torch.load(ckpt_path, map_location=\"cpu\") #加载模型\n",
    "        state_dict.pop(\"cls.weight\") #去掉最后一层的权重\n",
    "        state_dict.pop(\"cls.bias\") #去掉最后一层的偏置\n",
    "        \n",
    "        model = cls(num_classes=num_classes) #实例化模型\n",
    "        # 将修改后的状态字典加载到新创建的模型实例中。参数strict=False表示在加载状态字典时，如果字典中存在模型不期望的键或缺少某些期望的键，将不会抛出错误。这在迁移学习中很有用，因为你可能希望覆盖或忽略一些权重。\n",
    "        model.load_state_dict(state_dict, strict=False) #加载模型参数\n",
    "\n",
    "        return model\n",
    "        \n",
    "    def forward(self, x):\n",
    "        features = self.model(x)\n",
    "        return self.cls(features)\n",
    "        \n",
    "for key, value in VGG(len(class_names)).named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")\n",
    "    \n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练\n",
    "\n",
    "pytorch的训练需要自行实现，包括\n",
    "1. 定义损失函数\n",
    "2. 定义优化器\n",
    "3. 定义训练步\n",
    "4. 训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item())\n",
    "        \n",
    "        preds = logits.argmax(axis=-1)    # 验证集预测\n",
    "        pred_list.extend(preds.cpu().numpy().tolist())\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list)\n",
    "    return np.mean(loss_list), acc\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### TensorBoard 可视化\n",
    "\n",
    "\n",
    "训练过程中可以使用如下命令启动tensorboard服务。\n",
    "\n",
    "```shell\n",
    "tensorboard \\\n",
    "    --logdir=runs \\     # log 存放路径\n",
    "    --host 0.0.0.0 \\    # ip\n",
    "    --port 8848         # 端口\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs)\n",
    "\n",
    "    def draw_model(self, model, input_shape):\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape))\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            )\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        )\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "            \n",
    "        )\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss)\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc)\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate)\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=5000, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir\n",
    "        self.save_step = save_step\n",
    "        self.save_best_only = save_best_only\n",
    "        self.best_metrics = -1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir):\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0:\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\"))\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\"))\n",
    "\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience\n",
    "        self.min_delta = min_delta\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1\n",
    "            \n",
    "    @property\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2023-06-06 22:34:23.083028: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX_VNNI FMA\n",
      "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a7960883a43349d190d62f35b7296f5f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/7040 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device)\n",
    "                labels = labels.to(device)\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits.argmax(axis=-1)\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train()\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"],\n",
    "                            )\n",
    "                \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc)\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc)\n",
    "                        if early_stop_callback.early_stop:\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict\n",
    "        \n",
    "\n",
    "epoch = 10\n",
    "model = VGG(num_classes=10) #第一次先训练，得到下面best.ckpt后，再注释这一条，用下面的加载模型\n",
    "# model = VGG.from_pretrained(\"checkpoints/vgg-fine-tune/best.ckpt\", num_classes=10)\n",
    "\n",
    "# 1. 定义损失函数 采用交叉熵损失\n",
    "loss_fct = nn.CrossEntropyLoss()\n",
    "# 2. 定义优化器 采用 adam\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "# Optimizers specified in the torch.optim package\n",
    "# 微调（Fine-tuning）：在迁移学习或微调预训练模型时，这种方法特别有用。在这种情况下，你可能希望对模型的预训练部分（不包含\"cls\"的部分）使用较小的学习率，以避免破坏已经学到的特征。而对新添加的或需要特别训练的部分（如新的分类层，包含\"cls\"的部分）使用较高的学习率，以便更快地学习到特定任务的特征。\n",
    "optimizer = torch.optim.Adam(\n",
    "    [\n",
    "        {\n",
    "            \"params\": [value for key, value in model.named_parameters() if \"cls\" not in key],\n",
    "            \"lr\": 0.0001\n",
    "        },\n",
    "        {\n",
    "            \"params\": [value for key, value in model.named_parameters() if \"cls\" in key],\n",
    "            \"lr\": 0.0005\n",
    "        },\n",
    "     ]\n",
    "    )\n",
    "\n",
    "exp_name = \"vgg-fine-tune\"\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "if not os.path.exists(\"runs\"):\n",
    "    os.mkdir(\"runs\")\n",
    "tensorboard_callback = TensorBoardCallback(f\"runs/{exp_name}\")\n",
    "tensorboard_callback.draw_model(model, [1, 3, IMAGE_SIZE, IMAGE_SIZE])\n",
    "# 2. save best\n",
    "if not os.path.exists(\"checkpoints\"):\n",
    "    os.makedirs(\"checkpoints\")\n",
    "\n",
    "save_ckpt_callback = SaveCheckpointsCallback(f\"checkpoints/{exp_name}\", save_step=len(train_dl), save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=5)\n",
    "\n",
    "model = model.to(device)\n",
    "record = training(\n",
    "    model, \n",
    "    train_dl, \n",
    "    eval_dl, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=len(train_dl)\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzwAAAHACAYAAABnOW2lAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAADwfklEQVR4nOzdeXzcdZ348dd3zmRyH83RNm3pSS/aUqC2IHL0gCoL6ioCiuCKq1JXra7a3yoKrHQVF3BXlBVF1JVjVwFZKaWxWM7SQg9630fSNvcxk8kx9++P73y/c2SSzJVJk3k/H488mky+M/OZSdL5vud9fJRAIBBACCGEEEIIIcYgw0gvQAghhBBCCCGGiwQ8QgghhBBCiDFLAh4hhBBCCCHEmCUBjxBCCCGEEGLMkoBHCCGEEEIIMWZJwCOEEEIIIYQYsyTgEUIIIYQQQoxZEvAIIYQQQgghxizTSC8gHn6/n3PnzlFQUICiKCO9HCGEyBqBQICuri7Gjx+PwSDvkWnkdUkIIUZOoq9NoyLgOXfuHDU1NSO9DCGEyFr19fVMnDhxpJdx3pDXJSGEGHnxvjaNioCnoKAAUB9UYWFhwtf3eDxs2rSJlStXYjab0728YTEa1wyy7kwbjesejWuG7F23w+GgpqZG/39YqLLxdQlk3Zk2Gtc9GtcMsu5My/Rr06gIeLRygcLCwqRfWGw2G4WFhaPml2E0rhlk3Zk2Gtc9GtcMsm4p24qUja9LIOvOtNG47tG4ZpB1Z1qmX5ukIFsIIYQQQggxZknAI4QQQgghhBizJOARQgghhBBCjFmjoodHCHF+CgQCeL1efD5f3NfxeDyYTCb6+voSut5IG6vrNhqNmEwm6dERQggxZknAI4RIitvtpqGhgZ6enoSuFwgEqKqqor6+flSdZI/lddtsNqqrq7FYLBlenRBCCDH8JOARQiTM7/dz8uRJjEYj48ePx2KxxB0E+P1+nE4n+fn5o2ojy7G47kAggNvtpqWlhZMnTzJjxoxR9diEEEKIeEjAI4RImNvtxu/3U1NTg81mS+i6fr8ft9tNTk7OqDq5Hqvrzs3NxWw2c/r0af04IYQQYiwZPa/aQojzzmg68RcDk5+jEEKIsUxe5YQQQgghhBBjlgQ8QgghhBBCiDFLAh4hhEjSlClTeOSRR9JyW1u2bEFRFDo7O9Nye0IIIYRQydACIURWueqqq1i4cGFaApV3332XvLy81BclhBBCiGEjAY8QQoQJBAL4fD5MpqH/exw3blwGViSEEEKIVIz5kra3jrXykZ+9ze+OjvmHKsSICQQC9Li9cX/0un0JHT/YRyAQiHudd9xxB6+99ho//elPURQFRVF48sknURSFl19+mcWLF2O1WnnzzTc5fvw4N954I5WVleTn57NkyRK2bNkScXvRJW2KovCrX/2Kj370o9hsNmbMmMGLL76Y9PP6pz/9iblz52K1WpkyZQr//u//HvH9n//858yYMYOcnBwqKyv5+7//e/17f/zjH5k/fz55eXlMnTqVlStX0t3dnfRahBDJ+8GL+3lgw8GRXoYQWWvMZ3i6XV4ONzmZnD96dkYXYrTp9fiYc88rI3LfB+5bhc0S339lP/3pTzly5Ajz5s3jvvvuA2D//v0AfOc73+EnP/kJU6dOpaSkhPr6elavXs0Pf/hDrFYrv/3tb7nllls4ePAgU6ZMGfA+7r33Xn784x/z4IMP8p//+Z/cdtttnD59mtLS0oQe144dO/jkJz/JD37wA26++WbefvttvvzlL1NWVsYdd9zBe++9xz/90z/x+9//nmXLltHe3s4bb7wBQENDA7fccgs//vGPufHGG2loaGD37t0JBYdCiPRo73bz5NunAPja8hlx/38lhEifMf9XZzaqmR2fvM4LkfWKioqwWCzYbDaqqqoAOHToEAD33XcfK1as0I8tLS1lwYIF+tf33Xcff/rTn/i///s/vvKVrwx4H3fccQe33HILAA888AD/8R//wfbt27nuuusSWutDDz3Etddey/e+9z0AZs6cyYEDB3jwwQe54447qKurIy8vj4985CMUFBQwefJkFi1aBKgBj9fr5WMf+xg1NTWUlpaydOlS2W9HiBHQ3u3WP3f2eSXgEWIEjPm/OpNRzexIwCPE8Mk1Gzlw36q4jvX7/XQ5uigoLEjLCXiu2ZjybQBccsklEV87nU5+8IMf8NJLL+kBRG9vL3V1dYPezkUXXaR/npeXR2FhIc3NzQmv5+DBg9x4440Rl11++eU88sgj+Hw+VqxYweTJk5k6dSrXXXcd1113nV5Kt2DBAq699lrmz5/PypUr+eAHP8inP/1pysrKEl6HECI1nT2hgKfL5aViBNciRLYa82/3mYInVH4JeIQYNoqiYLOY4v7ItRgT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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"596.499199pt\" height=\"321.95625pt\" viewBox=\"0 0 596.499199 321.95625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-06-06T22:35:11.988945</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.3, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M -0 321.95625 \n",
       "L 596.499199 321.95625 \n",
       "L 596.499199 0 \n",
       "L -0 0 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 283.739489 284.4 \n",
       "L 283.739489 7.2 \n",
       "L 30.103125 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\">\n",
       "    <g id=\"xtick_1\">\n",
       "     <g id=\"line2d_1\">\n",
       "      <path d=\"M 41.632051 284.4 \n",
       "L 41.632051 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path id=\"m9cd81adfce\" d=\"M 0 0 \n",
       "L 0 3.5 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"41.632051\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_1\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(38.450801 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \n",
       "Q 1547 4250 1301 3770 \n",
       "Q 1056 3291 1056 2328 \n",
       "Q 1056 1369 1301 889 \n",
       "Q 1547 409 2034 409 \n",
       "Q 2525 409 2770 889 \n",
       "Q 3016 1369 3016 2328 \n",
       "Q 3016 3291 2770 3770 \n",
       "Q 2525 4250 2034 4250 \n",
       "z\n",
       "M 2034 4750 \n",
       "Q 2819 4750 3233 4129 \n",
       "Q 3647 3509 3647 2328 \n",
       "Q 3647 1150 3233 529 \n",
       "Q 2819 -91 2034 -91 \n",
       "Q 1250 -91 836 529 \n",
       "Q 422 1150 422 2328 \n",
       "Q 422 3509 836 4129 \n",
       "Q 1250 4750 2034 4750 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_2\">\n",
       "     <g id=\"line2d_3\">\n",
       "      <path d=\"M 74.571838 284.4 \n",
       "L 74.571838 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_4\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"74.571838\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_2\">\n",
       "      <!-- 1000 -->\n",
       "      <g transform=\"translate(61.846838 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
       "L 1825 531 \n",
       "L 1825 4091 \n",
       "L 703 3866 \n",
       "L 703 4441 \n",
       "L 1819 4666 \n",
       "L 2450 4666 \n",
       "L 2450 531 \n",
       "L 3481 531 \n",
       "L 3481 0 \n",
       "L 794 0 \n",
       "L 794 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_3\">\n",
       "     <g id=\"line2d_5\">\n",
       "      <path d=\"M 107.511626 284.4 \n",
       "L 107.511626 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_6\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"107.511626\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_3\">\n",
       "      <!-- 2000 -->\n",
       "      <g transform=\"translate(94.786626 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
       "L 3431 531 \n",
       "L 3431 0 \n",
       "L 469 0 \n",
       "L 469 531 \n",
       "Q 828 903 1448 1529 \n",
       "Q 2069 2156 2228 2338 \n",
       "Q 2531 2678 2651 2914 \n",
       "Q 2772 3150 2772 3378 \n",
       "Q 2772 3750 2511 3984 \n",
       "Q 2250 4219 1831 4219 \n",
       "Q 1534 4219 1204 4116 \n",
       "Q 875 4013 500 3803 \n",
       "L 500 4441 \n",
       "Q 881 4594 1212 4672 \n",
       "Q 1544 4750 1819 4750 \n",
       "Q 2544 4750 2975 4387 \n",
       "Q 3406 4025 3406 3419 \n",
       "Q 3406 3131 3298 2873 \n",
       "Q 3191 2616 2906 2266 \n",
       "Q 2828 2175 2409 1742 \n",
       "Q 1991 1309 1228 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_4\">\n",
       "     <g id=\"line2d_7\">\n",
       "      <path d=\"M 140.451413 284.4 \n",
       "L 140.451413 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_8\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"140.451413\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_4\">\n",
       "      <!-- 3000 -->\n",
       "      <g transform=\"translate(127.726413 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \n",
       "Q 3050 2419 3304 2112 \n",
       "Q 3559 1806 3559 1356 \n",
       "Q 3559 666 3084 287 \n",
       "Q 2609 -91 1734 -91 \n",
       "Q 1441 -91 1130 -33 \n",
       "Q 819 25 488 141 \n",
       "L 488 750 \n",
       "Q 750 597 1062 519 \n",
       "Q 1375 441 1716 441 \n",
       "Q 2309 441 2620 675 \n",
       "Q 2931 909 2931 1356 \n",
       "Q 2931 1769 2642 2001 \n",
       "Q 2353 2234 1838 2234 \n",
       "L 1294 2234 \n",
       "L 1294 2753 \n",
       "L 1863 2753 \n",
       "Q 2328 2753 2575 2939 \n",
       "Q 2822 3125 2822 3475 \n",
       "Q 2822 3834 2567 4026 \n",
       "Q 2313 4219 1838 4219 \n",
       "Q 1578 4219 1281 4162 \n",
       "Q 984 4106 628 3988 \n",
       "L 628 4550 \n",
       "Q 988 4650 1302 4700 \n",
       "Q 1616 4750 1894 4750 \n",
       "Q 2613 4750 3031 4423 \n",
       "Q 3450 4097 3450 3541 \n",
       "Q 3450 3153 3228 2886 \n",
       "Q 3006 2619 2597 2516 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_5\">\n",
       "     <g id=\"line2d_9\">\n",
       "      <path d=\"M 173.391201 284.4 \n",
       "L 173.391201 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_10\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"173.391201\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_5\">\n",
       "      <!-- 4000 -->\n",
       "      <g transform=\"translate(160.666201 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-34\" d=\"M 2419 4116 \n",
       "L 825 1625 \n",
       "L 2419 1625 \n",
       "L 2419 4116 \n",
       "z\n",
       "M 2253 4666 \n",
       "L 3047 4666 \n",
       "L 3047 1625 \n",
       "L 3713 1625 \n",
       "L 3713 1100 \n",
       "L 3047 1100 \n",
       "L 3047 0 \n",
       "L 2419 0 \n",
       "L 2419 1100 \n",
       "L 313 1100 \n",
       "L 313 1709 \n",
       "L 2253 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-34\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_6\">\n",
       "     <g id=\"line2d_11\">\n",
       "      <path d=\"M 206.330988 284.4 \n",
       "L 206.330988 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_12\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"206.330988\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_6\">\n",
       "      <!-- 5000 -->\n",
       "      <g transform=\"translate(193.605988 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-35\" d=\"M 691 4666 \n",
       "L 3169 4666 \n",
       "L 3169 4134 \n",
       "L 1269 4134 \n",
       "L 1269 2991 \n",
       "Q 1406 3038 1543 3061 \n",
       "Q 1681 3084 1819 3084 \n",
       "Q 2600 3084 3056 2656 \n",
       "Q 3513 2228 3513 1497 \n",
       "Q 3513 744 3044 326 \n",
       "Q 2575 -91 1722 -91 \n",
       "Q 1428 -91 1123 -41 \n",
       "Q 819 9 494 109 \n",
       "L 494 744 \n",
       "Q 775 591 1075 516 \n",
       "Q 1375 441 1709 441 \n",
       "Q 2250 441 2565 725 \n",
       "Q 2881 1009 2881 1497 \n",
       "Q 2881 1984 2565 2268 \n",
       "Q 2250 2553 1709 2553 \n",
       "Q 1456 2553 1204 2497 \n",
       "Q 953 2441 691 2322 \n",
       "L 691 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-35\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_7\">\n",
       "     <g id=\"line2d_13\">\n",
       "      <path d=\"M 239.270776 284.4 \n",
       "L 239.270776 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"239.270776\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_7\">\n",
       "      <!-- 6000 -->\n",
       "      <g transform=\"translate(226.545776 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-36\" d=\"M 2113 2584 \n",
       "Q 1688 2584 1439 2293 \n",
       "Q 1191 2003 1191 1497 \n",
       "Q 1191 994 1439 701 \n",
       "Q 1688 409 2113 409 \n",
       "Q 2538 409 2786 701 \n",
       "Q 3034 994 3034 1497 \n",
       "Q 3034 2003 2786 2293 \n",
       "Q 2538 2584 2113 2584 \n",
       "z\n",
       "M 3366 4563 \n",
       "L 3366 3988 \n",
       "Q 3128 4100 2886 4159 \n",
       "Q 2644 4219 2406 4219 \n",
       "Q 1781 4219 1451 3797 \n",
       "Q 1122 3375 1075 2522 \n",
       "Q 1259 2794 1537 2939 \n",
       "Q 1816 3084 2150 3084 \n",
       "Q 2853 3084 3261 2657 \n",
       "Q 3669 2231 3669 1497 \n",
       "Q 3669 778 3244 343 \n",
       "Q 2819 -91 2113 -91 \n",
       "Q 1303 -91 875 529 \n",
       "Q 447 1150 447 2328 \n",
       "Q 447 3434 972 4092 \n",
       "Q 1497 4750 2381 4750 \n",
       "Q 2619 4750 2861 4703 \n",
       "Q 3103 4656 3366 4563 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-36\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_8\">\n",
       "     <g id=\"line2d_15\">\n",
       "      <path d=\"M 272.210563 284.4 \n",
       "L 272.210563 7.2 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_16\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"272.210563\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_8\">\n",
       "      <!-- 7000 -->\n",
       "      <g transform=\"translate(259.485563 298.998438) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-37\" d=\"M 525 4666 \n",
       "L 3525 4666 \n",
       "L 3525 4397 \n",
       "L 1831 0 \n",
       "L 1172 0 \n",
       "L 2766 4134 \n",
       "L 525 4134 \n",
       "L 525 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-37\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_9\">\n",
       "     <!-- step -->\n",
       "     <g transform=\"translate(146.105682 312.676562) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-73\" d=\"M 2834 3397 \n",
       "L 2834 2853 \n",
       "Q 2591 2978 2328 3040 \n",
       "Q 2066 3103 1784 3103 \n",
       "Q 1356 3103 1142 2972 \n",
       "Q 928 2841 928 2578 \n",
       "Q 928 2378 1081 2264 \n",
       "Q 1234 2150 1697 2047 \n",
       "L 1894 2003 \n",
       "Q 2506 1872 2764 1633 \n",
       "Q 3022 1394 3022 966 \n",
       "Q 3022 478 2636 193 \n",
       "Q 2250 -91 1575 -91 \n",
       "Q 1294 -91 989 -36 \n",
       "Q 684 19 347 128 \n",
       "L 347 722 \n",
       "Q 666 556 975 473 \n",
       "Q 1284 391 1588 391 \n",
       "Q 1994 391 2212 530 \n",
       "Q 2431 669 2431 922 \n",
       "Q 2431 1156 2273 1281 \n",
       "Q 2116 1406 1581 1522 \n",
       "L 1381 1569 \n",
       "Q 847 1681 609 1914 \n",
       "Q 372 2147 372 2553 \n",
       "Q 372 3047 722 3315 \n",
       "Q 1072 3584 1716 3584 \n",
       "Q 2034 3584 2315 3537 \n",
       "Q 2597 3491 2834 3397 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-74\" d=\"M 1172 4494 \n",
       "L 1172 3500 \n",
       "L 2356 3500 \n",
       "L 2356 3053 \n",
       "L 1172 3053 \n",
       "L 1172 1153 \n",
       "Q 1172 725 1289 603 \n",
       "Q 1406 481 1766 481 \n",
       "L 2356 481 \n",
       "L 2356 0 \n",
       "L 1766 0 \n",
       "Q 1100 0 847 248 \n",
       "Q 594 497 594 1153 \n",
       "L 594 3053 \n",
       "L 172 3053 \n",
       "L 172 3500 \n",
       "L 594 3500 \n",
       "L 594 4494 \n",
       "L 1172 4494 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-65\" d=\"M 3597 1894 \n",
       "L 3597 1613 \n",
       "L 953 1613 \n",
       "Q 991 1019 1311 708 \n",
       "Q 1631 397 2203 397 \n",
       "Q 2534 397 2845 478 \n",
       "Q 3156 559 3463 722 \n",
       "L 3463 178 \n",
       "Q 3153 47 2828 -22 \n",
       "Q 2503 -91 2169 -91 \n",
       "Q 1331 -91 842 396 \n",
       "Q 353 884 353 1716 \n",
       "Q 353 2575 817 3079 \n",
       "Q 1281 3584 2069 3584 \n",
       "Q 2775 3584 3186 3129 \n",
       "Q 3597 2675 3597 1894 \n",
       "z\n",
       "M 3022 2063 \n",
       "Q 3016 2534 2758 2815 \n",
       "Q 2500 3097 2075 3097 \n",
       "Q 1594 3097 1305 2825 \n",
       "Q 1016 2553 972 2059 \n",
       "L 3022 2063 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-70\" d=\"M 1159 525 \n",
       "L 1159 -1331 \n",
       "L 581 -1331 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2969 \n",
       "Q 1341 3281 1617 3432 \n",
       "Q 1894 3584 2278 3584 \n",
       "Q 2916 3584 3314 3078 \n",
       "Q 3713 2572 3713 1747 \n",
       "Q 3713 922 3314 415 \n",
       "Q 2916 -91 2278 -91 \n",
       "Q 1894 -91 1617 61 \n",
       "Q 1341 213 1159 525 \n",
       "z\n",
       "M 3116 1747 \n",
       "Q 3116 2381 2855 2742 \n",
       "Q 2594 3103 2138 3103 \n",
       "Q 1681 3103 1420 2742 \n",
       "Q 1159 2381 1159 1747 \n",
       "Q 1159 1113 1420 752 \n",
       "Q 1681 391 2138 391 \n",
       "Q 2594 391 2855 752 \n",
       "Q 3116 1113 3116 1747 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-73\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-74\" x=\"52.099609\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-65\" x=\"91.308594\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-70\" x=\"152.832031\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_2\">\n",
       "    <g id=\"ytick_1\">\n",
       "     <g id=\"line2d_17\">\n",
       "      <path d=\"M 30.103125 277.167635 \n",
       "L 283.739489 277.167635 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_18\">\n",
       "      <defs>\n",
       "       <path id=\"ma3ecb2230b\" d=\"M 0 0 \n",
       "L -3.5 0 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"30.103125\" y=\"277.167635\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_10\">\n",
       "      <!-- 0.5 -->\n",
       "      <g transform=\"translate(7.2 280.966854) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-2e\" d=\"M 684 794 \n",
       "L 1344 794 \n",
       "L 1344 0 \n",
       "L 684 0 \n",
       "L 684 794 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_2\">\n",
       "     <g id=\"line2d_19\">\n",
       "      <path d=\"M 30.103125 219.377383 \n",
       "L 283.739489 219.377383 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_20\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"30.103125\" y=\"219.377383\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_11\">\n",
       "      <!-- 1.0 -->\n",
       "      <g transform=\"translate(7.2 223.176602) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_3\">\n",
       "     <g id=\"line2d_21\">\n",
       "      <path d=\"M 30.103125 161.587131 \n",
       "L 283.739489 161.587131 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_22\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"30.103125\" y=\"161.587131\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_12\">\n",
       "      <!-- 1.5 -->\n",
       "      <g transform=\"translate(7.2 165.38635) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_4\">\n",
       "     <g id=\"line2d_23\">\n",
       "      <path d=\"M 30.103125 103.796879 \n",
       "L 283.739489 103.796879 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_24\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"30.103125\" y=\"103.796879\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_13\">\n",
       "      <!-- 2.0 -->\n",
       "      <g transform=\"translate(7.2 107.596098) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_5\">\n",
       "     <g id=\"line2d_25\">\n",
       "      <path d=\"M 30.103125 46.006627 \n",
       "L 283.739489 46.006627 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_26\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"30.103125\" y=\"46.006627\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_14\">\n",
       "      <!-- 2.5 -->\n",
       "      <g transform=\"translate(7.2 49.805846) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_27\">\n",
       "    <path d=\"M 41.632051 19.8 \n",
       "L 44.926029 194.144122 \n",
       "L 48.220008 184.051746 \n",
       "L 51.513987 230.00749 \n",
       "L 54.807966 215.396345 \n",
       "L 58.101944 212.786038 \n",
       "L 61.395923 223.439782 \n",
       "L 64.689902 203.773685 \n",
       "L 67.983881 223.689093 \n",
       "L 71.277859 235.845474 \n",
       "L 74.571838 198.74583 \n",
       "L 77.865817 235.450196 \n",
       "L 81.159796 227.222392 \n",
       "L 84.453774 237.490606 \n",
       "L 87.747753 238.355799 \n",
       "L 91.041732 237.340334 \n",
       "L 94.335711 245.558031 \n",
       "L 97.629689 215.468584 \n",
       "L 100.923668 223.579314 \n",
       "L 104.217647 225.050062 \n",
       "L 107.511626 239.539449 \n",
       "L 110.805604 225.332489 \n",
       "L 114.099583 219.874193 \n",
       "L 117.393562 235.324332 \n",
       "L 120.687541 215.420953 \n",
       "L 123.981519 230.102664 \n",
       "L 127.275498 244.592884 \n",
       "L 130.569477 271.8 \n",
       "L 133.863456 227.635609 \n",
       "L 137.157434 212.207034 \n",
       "L 140.451413 220.361992 \n",
       "L 143.745392 217.033823 \n",
       "L 147.039371 240.574721 \n",
       "L 150.333349 255.302809 \n",
       "L 153.627328 216.963279 \n",
       "L 156.921307 235.493749 \n",
       "L 160.215286 204.111019 \n",
       "L 163.509264 238.403624 \n",
       "L 166.803243 226.175733 \n",
       "L 170.097222 215.922027 \n",
       "L 173.391201 228.359885 \n",
       "L 176.685179 230.413295 \n",
       "L 179.979158 215.410399 \n",
       "L 183.273137 262.543366 \n",
       "L 186.567116 238.115107 \n",
       "L 189.861094 270.916393 \n",
       "L 193.155073 229.532216 \n",
       "L 196.449052 248.417146 \n",
       "L 199.743031 239.743946 \n",
       "L 203.037009 239.217816 \n",
       "L 206.330988 230.121244 \n",
       "L 209.624967 247.546649 \n",
       "L 212.918946 249.156805 \n",
       "L 216.212924 233.151829 \n",
       "L 219.506903 256.72647 \n",
       "L 222.800882 254.422433 \n",
       "L 226.094861 228.965709 \n",
       "L 229.388839 229.169579 \n",
       "L 232.682818 234.213273 \n",
       "L 235.976797 252.764191 \n",
       "L 239.270776 262.008149 \n",
       "L 242.564754 242.08311 \n",
       "L 245.858733 230.869211 \n",
       "L 249.152712 257.642332 \n",
       "L 252.446691 240.981138 \n",
       "L 255.740669 261.806545 \n",
       "L 259.034648 240.556161 \n",
       "L 262.328627 239.017563 \n",
       "L 265.622606 235.69288 \n",
       "L 268.916584 261.884062 \n",
       "L 272.210563 219.825521 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_28\">\n",
       "    <path d=\"M 41.632051 35.378945 \n",
       "L 64.821661 228.581549 \n",
       "L 88.011271 234.941253 \n",
       "L 111.200882 239.254034 \n",
       "L 134.390492 242.000431 \n",
       "L 157.580103 242.470805 \n",
       "L 180.769713 241.898127 \n",
       "L 203.959323 242.746962 \n",
       "L 227.148934 245.290624 \n",
       "L 250.338544 246.298124 \n",
       "\" clip-path=\"url(#pd0bd6418b6)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 30.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 283.739489 284.4 \n",
       "L 283.739489 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 30.103125 284.4 \n",
       "L 283.739489 284.4 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 30.103125 7.2 \n",
       "L 283.739489 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_1\">\n",
       "    <g id=\"patch_7\">\n",
       "     <path d=\"M 197.148864 45.1125 \n",
       "L 276.739489 45.1125 \n",
       "Q 278.739489 45.1125 278.739489 43.1125 \n",
       "L 278.739489 14.2 \n",
       "Q 278.739489 12.2 276.739489 12.2 \n",
       "L 197.148864 12.2 \n",
       "Q 195.148864 12.2 195.148864 14.2 \n",
       "L 195.148864 43.1125 \n",
       "Q 195.148864 45.1125 197.148864 45.1125 \n",
       "z\n",
       "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_29\">\n",
       "     <path d=\"M 199.148864 20.298437 \n",
       "L 209.148864 20.298437 \n",
       "L 219.148864 20.298437 \n",
       "\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_15\">\n",
       "     <!-- train_loss -->\n",
       "     <g transform=\"translate(227.148864 23.798437) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-72\" d=\"M 2631 2963 \n",
       "Q 2534 3019 2420 3045 \n",
       "Q 2306 3072 2169 3072 \n",
       "Q 1681 3072 1420 2755 \n",
       "Q 1159 2438 1159 1844 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1341 3275 1631 3429 \n",
       "Q 1922 3584 2338 3584 \n",
       "Q 2397 3584 2469 3576 \n",
       "Q 2541 3569 2628 3553 \n",
       "L 2631 2963 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-61\" d=\"M 2194 1759 \n",
       "Q 1497 1759 1228 1600 \n",
       "Q 959 1441 959 1056 \n",
       "Q 959 750 1161 570 \n",
       "Q 1363 391 1709 391 \n",
       "Q 2188 391 2477 730 \n",
       "Q 2766 1069 2766 1631 \n",
       "L 2766 1759 \n",
       "L 2194 1759 \n",
       "z\n",
       "M 3341 1997 \n",
       "L 3341 0 \n",
       "L 2766 0 \n",
       "L 2766 531 \n",
       "Q 2569 213 2275 61 \n",
       "Q 1981 -91 1556 -91 \n",
       "Q 1019 -91 701 211 \n",
       "Q 384 513 384 1019 \n",
       "Q 384 1609 779 1909 \n",
       "Q 1175 2209 1959 2209 \n",
       "L 2766 2209 \n",
       "L 2766 2266 \n",
       "Q 2766 2663 2505 2880 \n",
       "Q 2244 3097 1772 3097 \n",
       "Q 1472 3097 1187 3025 \n",
       "Q 903 2953 641 2809 \n",
       "L 641 3341 \n",
       "Q 956 3463 1253 3523 \n",
       "Q 1550 3584 1831 3584 \n",
       "Q 2591 3584 2966 3190 \n",
       "Q 3341 2797 3341 1997 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-69\" d=\"M 603 3500 \n",
       "L 1178 3500 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 3500 \n",
       "z\n",
       "M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 4134 \n",
       "L 603 4134 \n",
       "L 603 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6e\" d=\"M 3513 2113 \n",
       "L 3513 0 \n",
       "L 2938 0 \n",
       "L 2938 2094 \n",
       "Q 2938 2591 2744 2837 \n",
       "Q 2550 3084 2163 3084 \n",
       "Q 1697 3084 1428 2787 \n",
       "Q 1159 2491 1159 1978 \n",
       "L 1159 0 \n",
       "L 581 0 \n",
       "L 581 3500 \n",
       "L 1159 3500 \n",
       "L 1159 2956 \n",
       "Q 1366 3272 1645 3428 \n",
       "Q 1925 3584 2291 3584 \n",
       "Q 2894 3584 3203 3211 \n",
       "Q 3513 2838 3513 2113 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-5f\" d=\"M 3263 -1063 \n",
       "L 3263 -1509 \n",
       "L -63 -1509 \n",
       "L -63 -1063 \n",
       "L 3263 -1063 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6c\" d=\"M 603 4863 \n",
       "L 1178 4863 \n",
       "L 1178 0 \n",
       "L 603 0 \n",
       "L 603 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-6f\" d=\"M 1959 3097 \n",
       "Q 1497 3097 1228 2736 \n",
       "Q 959 2375 959 1747 \n",
       "Q 959 1119 1226 758 \n",
       "Q 1494 397 1959 397 \n",
       "Q 2419 397 2687 759 \n",
       "Q 2956 1122 2956 1747 \n",
       "Q 2956 2369 2687 2733 \n",
       "Q 2419 3097 1959 3097 \n",
       "z\n",
       "M 1959 3584 \n",
       "Q 2709 3584 3137 3096 \n",
       "Q 3566 2609 3566 1747 \n",
       "Q 3566 888 3137 398 \n",
       "Q 2709 -91 1959 -91 \n",
       "Q 1206 -91 779 398 \n",
       "Q 353 888 353 1747 \n",
       "Q 353 2609 779 3096 \n",
       "Q 1206 3584 1959 3584 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-74\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"80.322266\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-69\" x=\"141.601562\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6e\" x=\"169.384766\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"232.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"282.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6f\" x=\"310.546875\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"371.728516\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"423.828125\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_30\">\n",
       "     <path d=\"M 199.148864 35.254687 \n",
       "L 209.148864 35.254687 \n",
       "L 219.148864 35.254687 \n",
       "\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_16\">\n",
       "     <!-- val_loss -->\n",
       "     <g transform=\"translate(227.148864 38.754687) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-76\" d=\"M 191 3500 \n",
       "L 800 3500 \n",
       "L 1894 563 \n",
       "L 2988 3500 \n",
       "L 3597 3500 \n",
       "L 2284 0 \n",
       "L 1503 0 \n",
       "L 191 3500 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-76\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"59.179688\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"120.458984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"148.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"198.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6f\" x=\"226.025391\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"287.207031\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-73\" x=\"339.306641\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_2\">\n",
       "   <g id=\"patch_8\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 588.103125 284.4 \n",
       "L 588.103125 7.2 \n",
       "L 334.466761 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_3\">\n",
       "    <g id=\"xtick_9\">\n",
       "     <g id=\"line2d_31\">\n",
       "      <path d=\"M 345.995687 284.4 \n",
       "L 345.995687 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_32\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"345.995687\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_17\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(342.814437 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_10\">\n",
       "     <g id=\"line2d_33\">\n",
       "      <path d=\"M 378.935474 284.4 \n",
       "L 378.935474 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_34\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"378.935474\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_18\">\n",
       "      <!-- 1000 -->\n",
       "      <g transform=\"translate(366.210474 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_11\">\n",
       "     <g id=\"line2d_35\">\n",
       "      <path d=\"M 411.875262 284.4 \n",
       "L 411.875262 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_36\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"411.875262\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_19\">\n",
       "      <!-- 2000 -->\n",
       "      <g transform=\"translate(399.150262 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_12\">\n",
       "     <g id=\"line2d_37\">\n",
       "      <path d=\"M 444.815049 284.4 \n",
       "L 444.815049 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_38\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"444.815049\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_20\">\n",
       "      <!-- 3000 -->\n",
       "      <g transform=\"translate(432.090049 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_13\">\n",
       "     <g id=\"line2d_39\">\n",
       "      <path d=\"M 477.754837 284.4 \n",
       "L 477.754837 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_40\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"477.754837\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_21\">\n",
       "      <!-- 4000 -->\n",
       "      <g transform=\"translate(465.029837 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-34\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_14\">\n",
       "     <g id=\"line2d_41\">\n",
       "      <path d=\"M 510.694624 284.4 \n",
       "L 510.694624 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_42\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"510.694624\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_22\">\n",
       "      <!-- 5000 -->\n",
       "      <g transform=\"translate(497.969624 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-35\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_15\">\n",
       "     <g id=\"line2d_43\">\n",
       "      <path d=\"M 543.634412 284.4 \n",
       "L 543.634412 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_44\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"543.634412\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_23\">\n",
       "      <!-- 6000 -->\n",
       "      <g transform=\"translate(530.909412 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-36\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_16\">\n",
       "     <g id=\"line2d_45\">\n",
       "      <path d=\"M 576.574199 284.4 \n",
       "L 576.574199 7.2 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_46\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m9cd81adfce\" x=\"576.574199\" y=\"284.4\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_24\">\n",
       "      <!-- 7000 -->\n",
       "      <g transform=\"translate(563.849199 298.998438) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-37\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"127.246094\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"190.869141\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_25\">\n",
       "     <!-- step -->\n",
       "     <g transform=\"translate(450.469318 312.676562) scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-73\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-74\" x=\"52.099609\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-65\" x=\"91.308594\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-70\" x=\"152.832031\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_4\">\n",
       "    <g id=\"ytick_6\">\n",
       "     <g id=\"line2d_47\">\n",
       "      <path d=\"M 334.466761 254.664 \n",
       "L 588.103125 254.664 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_48\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"254.664\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_26\">\n",
       "      <!-- 0.1 -->\n",
       "      <g transform=\"translate(311.563636 258.463219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-31\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_7\">\n",
       "     <g id=\"line2d_49\">\n",
       "      <path d=\"M 334.466761 222.408 \n",
       "L 588.103125 222.408 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_50\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"222.408\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_27\">\n",
       "      <!-- 0.2 -->\n",
       "      <g transform=\"translate(311.563636 226.207219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_8\">\n",
       "     <g id=\"line2d_51\">\n",
       "      <path d=\"M 334.466761 190.152 \n",
       "L 588.103125 190.152 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_52\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"190.152\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_28\">\n",
       "      <!-- 0.3 -->\n",
       "      <g transform=\"translate(311.563636 193.951219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-33\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_9\">\n",
       "     <g id=\"line2d_53\">\n",
       "      <path d=\"M 334.466761 157.896 \n",
       "L 588.103125 157.896 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_54\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"157.896\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_29\">\n",
       "      <!-- 0.4 -->\n",
       "      <g transform=\"translate(311.563636 161.695219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-34\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_10\">\n",
       "     <g id=\"line2d_55\">\n",
       "      <path d=\"M 334.466761 125.64 \n",
       "L 588.103125 125.64 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_56\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"125.64\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_30\">\n",
       "      <!-- 0.5 -->\n",
       "      <g transform=\"translate(311.563636 129.439219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_11\">\n",
       "     <g id=\"line2d_57\">\n",
       "      <path d=\"M 334.466761 93.384 \n",
       "L 588.103125 93.384 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_58\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"93.384\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_31\">\n",
       "      <!-- 0.6 -->\n",
       "      <g transform=\"translate(311.563636 97.183219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-36\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_12\">\n",
       "     <g id=\"line2d_59\">\n",
       "      <path d=\"M 334.466761 61.128 \n",
       "L 588.103125 61.128 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_60\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"61.128\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_32\">\n",
       "      <!-- 0.7 -->\n",
       "      <g transform=\"translate(311.563636 64.927219) scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-37\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_13\">\n",
       "     <g id=\"line2d_61\">\n",
       "      <path d=\"M 334.466761 28.872 \n",
       "L 588.103125 28.872 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_62\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#ma3ecb2230b\" x=\"334.466761\" y=\"28.872\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_33\">\n",
       "      <!-- 0.8 -->\n",
       "      <g transform=\"translate(311.563636 32.671219) scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-38\" d=\"M 2034 2216 \n",
       "Q 1584 2216 1326 1975 \n",
       "Q 1069 1734 1069 1313 \n",
       "Q 1069 891 1326 650 \n",
       "Q 1584 409 2034 409 \n",
       "Q 2484 409 2743 651 \n",
       "Q 3003 894 3003 1313 \n",
       "Q 3003 1734 2745 1975 \n",
       "Q 2488 2216 2034 2216 \n",
       "z\n",
       "M 1403 2484 \n",
       "Q 997 2584 770 2862 \n",
       "Q 544 3141 544 3541 \n",
       "Q 544 4100 942 4425 \n",
       "Q 1341 4750 2034 4750 \n",
       "Q 2731 4750 3128 4425 \n",
       "Q 3525 4100 3525 3541 \n",
       "Q 3525 3141 3298 2862 \n",
       "Q 3072 2584 2669 2484 \n",
       "Q 3125 2378 3379 2068 \n",
       "Q 3634 1759 3634 1313 \n",
       "Q 3634 634 3220 271 \n",
       "Q 2806 -91 2034 -91 \n",
       "Q 1263 -91 848 271 \n",
       "Q 434 634 434 1313 \n",
       "Q 434 1759 690 2068 \n",
       "Q 947 2378 1403 2484 \n",
       "z\n",
       "M 1172 3481 \n",
       "Q 1172 3119 1398 2916 \n",
       "Q 1625 2713 2034 2713 \n",
       "Q 2441 2713 2670 2916 \n",
       "Q 2900 3119 2900 3481 \n",
       "Q 2900 3844 2670 4047 \n",
       "Q 2441 4250 2034 4250 \n",
       "Q 1625 4250 1398 4047 \n",
       "Q 1172 3844 1172 3481 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-38\" x=\"95.410156\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_63\">\n",
       "    <path d=\"M 345.995687 271.8 \n",
       "L 349.289666 75.24 \n",
       "L 352.583644 130.68 \n",
       "L 355.877623 70.2 \n",
       "L 359.171602 105.48 \n",
       "L 362.465581 105.48 \n",
       "L 365.759559 75.24 \n",
       "L 369.053538 70.2 \n",
       "L 372.347517 80.28 \n",
       "L 375.641496 60.12 \n",
       "L 378.935474 90.36 \n",
       "L 382.229453 45 \n",
       "L 385.523432 75.24 \n",
       "L 388.817411 55.08 \n",
       "L 392.111389 65.16 \n",
       "L 395.405368 55.08 \n",
       "L 398.699347 65.16 \n",
       "L 401.993326 85.32 \n",
       "L 405.287304 60.12 \n",
       "L 408.581283 60.12 \n",
       "L 411.875262 45 \n",
       "L 415.169241 80.28 \n",
       "L 418.463219 60.12 \n",
       "L 421.757198 50.04 \n",
       "L 425.051177 80.28 \n",
       "L 428.345156 65.16 \n",
       "L 431.639134 65.16 \n",
       "L 434.933113 19.8 \n",
       "L 438.227092 80.28 \n",
       "L 441.521071 80.28 \n",
       "L 444.815049 95.4 \n",
       "L 448.109028 65.16 \n",
       "L 451.403007 80.28 \n",
       "L 454.696986 39.96 \n",
       "L 457.990964 80.28 \n",
       "L 461.284943 55.08 \n",
       "L 464.578922 85.32 \n",
       "L 467.872901 45 \n",
       "L 471.166879 60.12 \n",
       "L 474.460858 65.16 \n",
       "L 477.754837 80.28 \n",
       "L 481.048816 65.16 \n",
       "L 484.342794 60.12 \n",
       "L 487.636773 39.96 \n",
       "L 490.930752 60.12 \n",
       "L 494.224731 34.92 \n",
       "L 497.518709 65.16 \n",
       "L 500.812688 29.88 \n",
       "L 504.106667 55.08 \n",
       "L 507.400646 55.08 \n",
       "L 510.694624 55.08 \n",
       "L 513.988603 39.96 \n",
       "L 517.282582 50.04 \n",
       "L 520.576561 60.12 \n",
       "L 523.870539 24.84 \n",
       "L 527.164518 55.08 \n",
       "L 530.458497 60.12 \n",
       "L 533.752476 75.24 \n",
       "L 537.046454 39.96 \n",
       "L 540.340433 45 \n",
       "L 543.634412 34.92 \n",
       "L 546.928391 45 \n",
       "L 550.222369 70.2 \n",
       "L 553.516348 34.92 \n",
       "L 556.810327 45 \n",
       "L 560.104306 39.96 \n",
       "L 563.398284 65.16 \n",
       "L 566.692263 60.12 \n",
       "L 569.986242 60.12 \n",
       "L 573.280221 34.92 \n",
       "L 576.574199 80.28 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_64\">\n",
       "    <path d=\"M 345.995687 258.792768 \n",
       "L 369.185297 68.22432 \n",
       "L 392.374908 60.740928 \n",
       "L 415.564518 56.547648 \n",
       "L 438.754129 53.580096 \n",
       "L 461.943739 52.160832 \n",
       "L 485.133349 52.805952 \n",
       "L 508.32296 50.419008 \n",
       "L 531.51257 50.354496 \n",
       "L 554.70218 49.128768 \n",
       "\" clip-path=\"url(#p40dc034a22)\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 334.466761 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path d=\"M 588.103125 284.4 \n",
       "L 588.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path d=\"M 334.466761 284.4 \n",
       "L 588.103125 284.4 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_12\">\n",
       "    <path d=\"M 334.466761 7.2 \n",
       "L 588.103125 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_2\">\n",
       "    <g id=\"patch_13\">\n",
       "     <path d=\"M 503.703125 279.4 \n",
       "L 581.103125 279.4 \n",
       "Q 583.103125 279.4 583.103125 277.4 \n",
       "L 583.103125 248.4875 \n",
       "Q 583.103125 246.4875 581.103125 246.4875 \n",
       "L 503.703125 246.4875 \n",
       "Q 501.703125 246.4875 501.703125 248.4875 \n",
       "L 501.703125 277.4 \n",
       "Q 501.703125 279.4 503.703125 279.4 \n",
       "z\n",
       "\" style=\"fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_65\">\n",
       "     <path d=\"M 505.703125 254.585938 \n",
       "L 515.703125 254.585938 \n",
       "L 525.703125 254.585938 \n",
       "\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_34\">\n",
       "     <!-- train_acc -->\n",
       "     <g transform=\"translate(533.703125 258.085938) scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-63\" d=\"M 3122 3366 \n",
       "L 3122 2828 \n",
       "Q 2878 2963 2633 3030 \n",
       "Q 2388 3097 2138 3097 \n",
       "Q 1578 3097 1268 2742 \n",
       "Q 959 2388 959 1747 \n",
       "Q 959 1106 1268 751 \n",
       "Q 1578 397 2138 397 \n",
       "Q 2388 397 2633 464 \n",
       "Q 2878 531 3122 666 \n",
       "L 3122 134 \n",
       "Q 2881 22 2623 -34 \n",
       "Q 2366 -91 2075 -91 \n",
       "Q 1284 -91 818 406 \n",
       "Q 353 903 353 1747 \n",
       "Q 353 2603 823 3093 \n",
       "Q 1294 3584 2113 3584 \n",
       "Q 2378 3584 2631 3529 \n",
       "Q 2884 3475 3122 3366 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-74\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-72\" x=\"39.208984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"80.322266\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-69\" x=\"141.601562\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6e\" x=\"169.384766\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"232.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"282.763672\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"344.042969\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"399.023438\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_66\">\n",
       "     <path d=\"M 505.703125 269.542188 \n",
       "L 515.703125 269.542188 \n",
       "L 525.703125 269.542188 \n",
       "\" style=\"fill: none; stroke: #ff7f0e; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_35\">\n",
       "     <!-- val_acc -->\n",
       "     <g transform=\"translate(533.703125 273.042188) scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-76\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"59.179688\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-6c\" x=\"120.458984\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-5f\" x=\"148.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-61\" x=\"198.242188\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"259.521484\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-63\" x=\"314.501953\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pd0bd6418b6\">\n",
       "   <rect x=\"30.103125\" y=\"7.2\" width=\"253.636364\" height=\"277.2\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p40dc034a22\">\n",
       "   <rect x=\"334.466761\" y=\"7.2\" width=\"253.636364\" height=\"277.2\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns)\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5))\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        # axs[idx].set_xticks(range(0, train_df.index[-1], 5000))\n",
    "        # axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", range(0, train_df.index[-1], 5000)))\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=100)  #横坐标是 steps"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.7671\n",
      "accuracy: 0.7372\n"
     ]
    }
   ],
   "source": [
    "# dataload for evaluating\n",
    "\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(f\"checkpoints/{exp_name}/best.ckpt\", map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, eval_dl, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 推理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "881a228ecb1a459394a8370e52c7555c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/4688 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>filepath</th>\n",
       "      <th>class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>cifar-10/test/1.png</td>\n",
       "      <td>deer</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>cifar-10/test/2.png</td>\n",
       "      <td>airplane</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>cifar-10/test/3.png</td>\n",
       "      <td>truck</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>cifar-10/test/4.png</td>\n",
       "      <td>ship</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>cifar-10/test/5.png</td>\n",
       "      <td>airplane</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              filepath     class\n",
       "0  cifar-10/test/1.png      deer\n",
       "1  cifar-10/test/2.png  airplane\n",
       "2  cifar-10/test/3.png     truck\n",
       "3  cifar-10/test/4.png      ship\n",
       "4  cifar-10/test/5.png  airplane"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test_df\n",
    "# test_ds = Cifar10Dataset(\"test\", transform=transforms_eval)\n",
    "# test_dl = DataLoader(test_ds, batch_size=batch_size, shuffle=False, drop_last=False)\n",
    "#\n",
    "# preds_collect = []\n",
    "# model.eval()\n",
    "# for data, fake_label in tqdm(test_dl):\n",
    "#     data = data.to(device=device)\n",
    "#     logits = model(data)\n",
    "#     preds = [test_ds.idx_to_label[idx] for idx in logits.argmax(axis=-1).cpu().tolist()]\n",
    "#     preds_collect.extend(preds)\n",
    "#\n",
    "# test_df[\"class\"] = preds_collect\n",
    "# test_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导出 submission.csv\n",
    "# test_df.to_csv(\"submission.csv\", index=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
